/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package compilador.analisadorSintatico.metodos;

import compilador.analisadorLexico.Token;
import compilador.analisadorLexico.TokenClass;
import compilador.analisadorSintatico.Producao;
import compilador.analisadorSintatico.TokenReader;
import compilador.analisadorSintatico.classe.NOME;
import compilador.analisadorSintatico.operacoes.VALOR_NUM;
import compilador.analisadorSintatico.simboloGramatical.NaoTerminal;
import compilador.analisadorSintatico.simboloGramatical.SimboloGramatical;
import compilador.analisadorSintatico.simboloGramatical.Terminal;

/**
 *
 * @author nelson
 */
class VARIAVEL_SIMPLES extends Producao {

    @Override
    public SimboloGramatical derivar() throws Exception {
        //pega a instância do tokenReader
        TokenReader tokenReader = TokenReader.getInstance();
        //consome o primeiro token
        Token t = tokenReader.seeCurrent();


        if (t.getTokenClass().equals(TokenClass.IDENTIFICADOR)) {
            ((NaoTerminal)this.simbolo).add(new NOME().derivar());
            if (tokenReader.seeCurrent().getAtributo().equals("[")) {
                ((NaoTerminal)this.simbolo).add(new Terminal(tokenReader.consome()));
                ((NaoTerminal)this.simbolo).add(new VALOR_NUM().derivar());
                if (tokenReader.seeCurrent().getAtributo().equals("]")) {
                    ((NaoTerminal)this.simbolo).add(new Terminal(tokenReader.consome()));
                } else {
                    erro("Você deve ter esquecido o ]");
                    return this.simbolo;
                }
            }
        } else {
             erro(" ");
             return this.simbolo;
        }
        return this.simbolo;
    }

    @Override
    public void setSimbolo() {

        this.simbolo = new NaoTerminal("VARIAVEL_SIMPLES");

    }
}
